package xiaomin.demo.algorithm;

import java.util.ArrayList;
import java.util.HashMap;
/*
设计 一个 类， 包含 如下 两个 成员 函数： Save（ int input） 插入 一个 整数 到 一个 整数 集合 里。
Test（ int target） 检验 是否 存在 两 个数 和 为 输入 值。
如果 存在 这 两 个数， 则 返回 true； 否则 返回 false。

陈东锋. 进军硅谷:程序员面试揭秘 (技术移民参考手册) (p. 62). 电子工业出版社. Kindle 版本.
思路：
构造两个数据结构：一个列表arr，一个哈希表dic，Key为输入值，value为该值出现的次数
输入测试值X
遍历列表arr,计算X和arr[i]的差值cha
    如果cha==x，判断dic中存在,并且个数等于偶数,返回ture
    如果cha在dic中存在则返回true
 */
public class Lesson03 {
    private static HashMap<Integer,Integer> dic=new HashMap<Integer, Integer>();
    private static ArrayList<Integer> list=new ArrayList<Integer>();

    public static void save(int input){
        if(dic.containsKey(input)){
            dic.put(input, dic.get(input)+1);
        }
        else {
            dic.put(input,1);
            list.add(input);
        }
    }

    public static boolean test(int input){
        for (int x:list) {
            int cha=input-x;
            if(cha==x){
                if(dic.get(x)>1){
                    System.out.println(dic.get(x));
                    System.out.println(x);
                    System.out.println(cha);
                    System.out.println("成功");
                    return true;//两个相同的数相加
                }
            }
            else{
                if(dic.containsKey(cha)){
                    System.out.println(x);
                    System.out.println(cha);
                    System.out.println("成功");
                    return true;
                }
            }
        }

        System.out.println("失败");
        return false;
    }
}
